package com.ftg.learn.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * 系统日志，用来记录谁登陆了，操作了什么方法，状态
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/9/15 上午8:37
 */
@Component
@Aspect
@EnableAspectJAutoProxy
public class SysLogsAop {

    /**
     * bs 请求/响应
     *
     * HttpServletRequest 请求 (请求报文 : )
     *
     *  httpservletreqeust 是一个类. java 扩展包功能
     *  servlet.jar 里面提供的
     *
     *  web 内置处理了 servlet  (直接包含并注入zx)
     *
     */
    @Autowired
    HttpServletRequest request;

    /**
     * 约定大于配置
     * 范围管理 (收集需求)
     *
     * 添加  save*
     * 修改  modify*
     * 查一  findOne*
     * 删除  del*
     * 显示  show*
     * 判断  checked*
     * 冻    freeze*
     *
     */
    @AfterReturning("execution(public * com.ftg.learn.controller.*.*(..))")
    public void success(JoinPoint jp){
        System.out.println(jp);
        System.out.println(request.getMethod());
        //目标类  目标方法

        //表，
        System.out.println("所有的方法 执行完成以后我会走一下");
    }

    /**
     * ProceedingJoinPoint is only supported for around advice
     */
    @AfterThrowing("execution(public * com.ftg.learn.controller.*.*(..))")
    public void failure(){
        System.out.println("所有的方法 抛出异常的时候");
    }

}
